// 使用说明：
// 1、获取一条表数据并复制给下面的data对象
// 2、根据你的需求修改actions配置项内的各项配置，主要配置项是mixDataStructure
// 3、运行pnpm run plop  (plop generateColumns --plopfile plop/plopFileGenerateColumns.js)
// 4、生成的文件result/columns.ts，复制到你的项目中，然后使用即可，视情况考虑是否添加列的类型约束

// 即将被格式化的数据
const defaultData = `{"id": 1,"createTime":"2023-07-19 20:44:13","createBy":"sat"}`

export default {
  description: '基于表查询接口返回的数据结构生成前端表列结构',
  prompts: [
    {
      type: 'list',
      name: 'path',
      message: '请选择创建目录',
      // 选择列表
      choices: ['./temp/columns'],
    },
    {
      type: 'input',
      name: 'json',
      message: `请输入表数据的json，可为空，如有请将json压缩为单行，如：\n ${defaultData}`,
      // 验证
      validate: (v) => {
        if (!v)
          return true
        try {
          JSON.parse(v)
          return true
        }
        catch {
          return 'JSON格式错误'
        }
      },
    },
    {
      type: 'confirm',
      name: 'showActionColumn',
      message: '是否显示表的操作列？（回车 默认开启）',
      default: true,
    },
    {
      type: 'confirm',
      name: 'showSelection',
      message: '是否开启表格勾选框？（回车 默认开启）',
      default: true,
    },
    {
      type: 'confirm',
      name: 'showIndex',
      message: '是否选择表序号列？（回车 默认开启）',
      default: true,
    },
    {
      type: 'confirm',
      name: 'mixDataStructure',
      message:
        '是否导出混合数据结构，表示数据结构同时包含form、table、detail、search组件需要的数据？（回车 默认开启）',
      default: true,
    },
  ],
  actions: (data) => {
    const actions = []
    actions.push({
      type: 'add',
      path: `${data.path}/index.ts`, // 文件生成路径
      force: true, // 是否覆盖上次生成的内容
      templateFile: './templates/columns.ts.hbs', // 生成的文件的模板
      data: {
        object: data.json ? JSON.parse(data.json) : JSON.parse(defaultData), // 即将被格式化的数据
        showActionColumn: data.showActionColumn, // 是否显示表的操作列
        showSelection: data.showSelection, // 是否开启表格勾选框
        showIndex: data.showIndex, // 是否选择表序号列
        mixDataStructure: data.mixDataStructure, // 是否导出混合数据结构，表示数据结构同时包含form、table、detail、search组件需要的数据
      },
    })
    return actions
  },
}
